﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DAL;

namespace BLL
{
    public class AlquileresC
    {
        #region Propiedades
        public int numeroAlquiler { get; set; }
        public int codigoCliente { get; set; }
        public DateTime fechaObtencion { get; set; }
        public DateTime fechaEntrega { get; set; }
        public decimal totalCancelar { get; set; }
        public decimal subTotal { get; set; }
        public decimal impuesto { get; set; }
        public int codigoAuto { get; set; }
        public string vin { get; set; }
        public decimal totalAuto { get; set; }
        public decimal polizaSeguro { get; set; }
        public decimal extras { get; set; }
        public DataTable Alquiler { get; set; }


        #endregion

        #region variables privadas

        SqlConnection cnn;
        string mensaje_error;
        int numero_error;
        string sql;
        DataSet ds;
        SqlTransaction transac;
        #endregion

        #region Metodos
        public DataSet cargaAlquileres()
        {
            cnn = dal.TraeConexion("RentaCar", ref mensaje_error, ref numero_error);
            if (cnn == null)
            {
                // msg_error = mensaje_error;
                // num_error = numero_error;
                return null;
            }
            else
            {
                sql = "uspAlquileres";
                ParamStruct[] parametros = new ParamStruct[1];
                dal.AgregarDatosEstructuraParametros(ref parametros, 0, "@id", SqlDbType.Int, 0);

                ds = dal.EjecutaDataSet(cnn, sql, true, parametros, ref mensaje_error, ref numero_error);
                if (ds == null)
                {
                    //   msg_error = mensaje_error;
                    // num_error = numero_error;
                    return null;
                }
                else
                {
                    if (ds.Tables[0].Rows.Count > 0)
                    {

                        return ds;

                    }
                    else
                    {
                        return null;
                    }

                }
            }
        }



        //Enviar los Datos al prodecimiento y ejecutar la accion.
        public bool insertarAlquilerDet(string vin, int codigoAuto, int numeroAlquiler,
            decimal totalAuto, decimal polizaSeguro, decimal extras)
        {

            sql = "uspAlquileres";
            ParamStruct[] parametros = new ParamStruct[7];
            
            dal.AgregarDatosEstructuraParametros(ref parametros, 0, "@id", SqlDbType.Int, 5);
            dal.AgregarDatosEstructuraParametros(ref parametros, 1, "@VIN", SqlDbType.NVarChar, vin);
            dal.AgregarDatosEstructuraParametros(ref parametros, 2, "@Codigo_Auto", SqlDbType.Int, codigoAuto);
            dal.AgregarDatosEstructuraParametros(ref parametros, 3, "@Numero_Alquiler", SqlDbType.Int, numeroAlquiler);
            dal.AgregarDatosEstructuraParametros(ref parametros, 4, "@Total_Auto", SqlDbType.Money, totalAuto);
            dal.AgregarDatosEstructuraParametros(ref parametros, 5, "@Poliza_Seguro", SqlDbType.Money, polizaSeguro);
            dal.AgregarDatosEstructuraParametros(ref parametros, 6, "@Extras", SqlDbType.Money, extras);

            dal.EjecutaSqlCommand(ref transac, cnn, sql, true, parametros, ref mensaje_error, ref numero_error);
            
            if (numero_error != 0)
            {


                return false;
            }
            else
            {
                return true;
            }


        }
    
        public string insertarAlquileres()
        {
            cnn = dal.TraeConexion("RentaCar", ref mensaje_error, ref numero_error);
            if (cnn == null)
            {

                return "";
            }
            else
            {
                dal.Conectar(cnn, ref mensaje_error, ref numero_error);
                string sd = mensaje_error + "//" + numero_error + "?//?";
                sql = "uspAlquileres";
                ParamStruct[] parametros = new ParamStruct[7];


                dal.AgregarDatosEstructuraParametros(ref parametros, 0, "@id", SqlDbType.Int, 1);
                dal.AgregarDatosEstructuraParametros(ref parametros, 1, "@Codigo_Cliente", SqlDbType.Int, codigoCliente);
                dal.AgregarDatosEstructuraParametros(ref parametros, 2, "@Fecha_Obtencion", SqlDbType.DateTime, fechaObtencion);
                dal.AgregarDatosEstructuraParametros(ref parametros, 3, "@Fecha_Entrega", SqlDbType.DateTime, fechaEntrega);
                dal.AgregarDatosEstructuraParametros(ref parametros, 4, "@Total_Cancelar", SqlDbType.Money, totalCancelar);
                dal.AgregarDatosEstructuraParametros(ref parametros, 5, "@Sub_Total", SqlDbType.Money, subTotal);
                dal.AgregarDatosEstructuraParametros(ref parametros, 6, "@Impuesto", SqlDbType.Money, impuesto);


                ds = dal.EjecutaDataSet(cnn, sql, true, parametros, ref mensaje_error, ref numero_error);

                if (numero_error != 0)
                {


                    //insertar en tabla errores
                    sd = mensaje_error + "//" + numero_error + "?//?";
                    dal.Desconectar(cnn, ref mensaje_error, ref numero_error);
                    return sd;
                }
                else
                {

                    for (int i = 0; i < Alquiler.Rows.Count; i++)
                    {

                        if (!this.insertarAlquilerDet(Alquiler.Rows[i]["VIN"].ToString(),
                            Convert.ToInt32(ds.Tables[0].Rows[0]["Codigo_Auto"]),
                            Convert.ToInt32(ds.Tables[0].Rows[0]["Numero_Alquiler"]),
                            Convert.ToDecimal(Alquiler.Rows[i]["Total_Auto"].ToString()),
                             Convert.ToDecimal(Alquiler.Rows[i]["Poliza_Seguro"].ToString()),
                              Convert.ToDecimal(Alquiler.Rows[i]["Extras"].ToString())))
                        {


                            sd = mensaje_error + "//" + numero_error + "?//?";
                            dal.Desconectar(cnn, ref mensaje_error, ref numero_error);
                            return sd;
                        }
                    }


                    dal.Desconectar(cnn, ref mensaje_error, ref numero_error);
                    return ds.Tables[0].Rows[0]["Msj"].ToString();
                }

            }


            
        }
        public string actualizarAlquileres()
        {
            cnn = dal.TraeConexion("RentaCar", ref mensaje_error, ref numero_error);
            if (cnn == null)
            {

                return "";
            }
            else
            {
                dal.Conectar(cnn, ref mensaje_error, ref numero_error);
                string sd = mensaje_error + "//" + numero_error + "?//?";
                sql = "uspAlquileres";
                ParamStruct[] parametros = new ParamStruct[8];

                dal.AgregarDatosEstructuraParametros(ref parametros, 0, "@id", SqlDbType.Int, 2);
                dal.AgregarDatosEstructuraParametros(ref parametros, 1, "@Codigo_Cliente", SqlDbType.Int, codigoCliente);
                dal.AgregarDatosEstructuraParametros(ref parametros, 2, "@Fecha_Obtencion", SqlDbType.DateTime, fechaObtencion);
                dal.AgregarDatosEstructuraParametros(ref parametros, 3, "@Fecha_Entrega", SqlDbType.DateTime, fechaEntrega);
                dal.AgregarDatosEstructuraParametros(ref parametros, 4, "@Total_Cancelar", SqlDbType.Money, totalCancelar);
                dal.AgregarDatosEstructuraParametros(ref parametros, 5, "@Sub_Total", SqlDbType.Money, subTotal);
                dal.AgregarDatosEstructuraParametros(ref parametros, 6, "@Impuesto", SqlDbType.Money, impuesto);
                dal.AgregarDatosEstructuraParametros(ref parametros, 7, "@Numero_Alquiler", SqlDbType.Int, numeroAlquiler);

                ds = dal.EjecutaDataSet(cnn, sql, true, parametros, ref mensaje_error, ref numero_error);
                if (numero_error != 0)
                {
                    //insertar en tabla errores
                    sd = mensaje_error + "//" + numero_error + "?//?";
                    dal.Desconectar(cnn, ref mensaje_error, ref numero_error);

                    return sd;
                }

                return ds.Tables[0].Rows[0]["Msj"].ToString();
            }
        }
        public DataSet editarAlquileres()
        {
            cnn = dal.TraeConexion("RentaCar", ref mensaje_error, ref numero_error);
            if (cnn == null)
            {
                // msg_error = mensaje_error;
                // num_error = numero_error;
                return null;
            }
            else
            {
                sql = "uspAlquileres";
                ParamStruct[] parametros = new ParamStruct[2];
                dal.AgregarDatosEstructuraParametros(ref parametros, 0, "@id", SqlDbType.Int, 4);
                dal.AgregarDatosEstructuraParametros(ref parametros, 1, "@Numero_Alquiler", SqlDbType.Int, numeroAlquiler);


                ds = dal.EjecutaDataSet(cnn, sql, true, parametros, ref mensaje_error, ref numero_error);
                if (ds == null)
                {

                    return null;
                }
                else
                {
                    if (ds.Tables[0].Rows.Count > 0)
                    {

                        return ds;

                    }
                    else
                    {
                        return null;
                    }

                }
            }
        }
        public string eliminarAlquileres()
        {
            cnn = dal.TraeConexion("RentaCar", ref mensaje_error, ref numero_error);
            if (cnn == null)
            {

                return "";
            }
            else
            {
                dal.Conectar(cnn, ref mensaje_error, ref numero_error);
                string sd = mensaje_error + "//" + numero_error + "?//?";
                sql = "uspAlquileres";
                ParamStruct[] parametros = new ParamStruct[2];


                dal.AgregarDatosEstructuraParametros(ref parametros, 0, "@id", SqlDbType.Int, 3);
                dal.AgregarDatosEstructuraParametros(ref parametros, 1, "@Numero_Alquiler", SqlDbType.Int, numeroAlquiler);



                ds = dal.EjecutaDataSet(cnn, sql, true, parametros, ref mensaje_error, ref numero_error);
                if (numero_error != 0)
                {
                    //insertar en tabla errores
                    sd = mensaje_error + "//" + numero_error + "?//?";
                    dal.Desconectar(cnn, ref mensaje_error, ref numero_error);

                    return sd;
                }

                return ds.Tables[0].Rows[0]["Msj"].ToString();
            }
        }
        public DataSet cargaAutostotalCaracteristicas()
        {
            cnn = dal.TraeConexion("RentaCar", ref mensaje_error, ref numero_error);
            if (cnn == null)
            {
                // msg_error = mensaje_error;
                // num_error = numero_error;
                return null;
            }
            else
            {
                sql = "uspAlquileres";
                ParamStruct[] parametros = new ParamStruct[1];
                dal.AgregarDatosEstructuraParametros(ref parametros, 0, "@id", SqlDbType.Int, 6);

                ds = dal.EjecutaDataSet(cnn, sql, true, parametros, ref mensaje_error, ref numero_error);
                if (ds == null)
                {
                    //   msg_error = mensaje_error;
                    // num_error = numero_error;
                    return null;
                }
                else
                {
                    if (ds.Tables[0].Rows.Count > 0)
                    {

                        return ds;

                    }
                    else
                    {
                        return null;
                    }

                }
            }
        }


        #endregion
    }
}
